package com.scz.util;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.scz.config.HouseProperties;
import com.scz.dto.log.BaseLogDto;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

public class LogWriterUtil {

    // 默认日志文件路径
    private static final String DEFAULT_LOG_FILE_PATH =  HouseProperties.get("filePath");;
    // 日期格式化对象，用于格式化日志时间戳
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 将日志信息以追加方式写入默认日志文件
     * @param logMessage 要写入的日志信息
     */
    public static synchronized void writeLog(String logMessage) {
        writeLogToFile(logMessage, DEFAULT_LOG_FILE_PATH);
    }

    public static synchronized void writeLog(BaseLogDto dto){
        String msg = JSONObject.toJSONString(dto, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue);
        writeLog(msg);
    }

    /**
     * 将日志信息以追加方式写入指定路径的日志文件
     * @param logMessage 要写入的日志信息
     * @param filePath 指定的日志文件路径
     */
    public static synchronized void writeLog(String logMessage, String filePath) {
        writeLogToFile(logMessage, filePath);
    }

    /**
     * 实际执行日志写入文件的方法
     * @param logMessage 要写入的日志信息
     * @param filePath 日志文件路径
     */
    private static void writeLogToFile(String logMessage, String filePath) {
        try (FileWriter fileWriter = new FileWriter(new File(filePath), true);
             PrintWriter printWriter = new PrintWriter(fileWriter)) {
            // 获取当前时间并格式化为指定格式
            String timestamp = DATE_FORMAT.format(new Date());
            // 构建完整的日志记录，包含时间戳和日志信息
            String fullLogMessage = "[" + timestamp + "] " + logMessage;
            // 将完整的日志记录写入文件
            printWriter.println(fullLogMessage);
        } catch (IOException e) {
            // 若写入过程中出现异常，打印错误信息
            System.err.println("写入日志文件时出错: " + e.getMessage());
        }
    }
}